﻿using System;
using System.Collections.Generic;
using System.Text;
using System.Web.Security;
using System.Security.Cryptography;
using Geleximco.Common;

namespace Geleximco.Web.Provider {

    /// <summary>
    /// Membership provider that authenticate the user thanks to user name and password stored in
    /// MDC_UTILISATEUR table.
    /// </summary>
    public class CustomSqlMembershipProvider : MembershipProvider {

        /// <summary>
        /// Check if the user name and password are correct.
        /// </summary>
        /// <param name="username">user identifier</param>
        /// <param name="password">plain text password</param>
        /// <returns>true if the username and password are correct, false otherwise</returns>
        public override bool ValidateUser(string username, string password) {
            //using (IUserManager userMgr = ComponentLocator.Get<IUserManager>()) {
            //    UserTds userTds = userMgr.GetUserByEmail(username);
            //    if (userTds.Users.Count > 0 && userTds.Users[0].UserAccountActive &&
            //        SecurityHelper.VerifySHA1Hash(userTds.Users[0], password)) {

            //        double passwordAge =
            //            DateTime.Now.Subtract(userTds.Users[0].PWGenerationDate).TotalDays;
            //        if (passwordAge > CommonConstant.EXPIRED_PASSWORD) {
            //            throw new PasswordExpiredException(
            //                "Password of user {0} has been expired", username);
            //        }

            //        // Store the information of the current user into Session for later use
            //        SessionHelper.CurrentUser = userTds;
            //        using (IActorManager actorManager = ComponentLocator.Get<IActorManager>()) {
            //            SessionHelper.CurrentActor = actorManager.GetActor(userTds.Users[0].ActorID);
            //        }
            //        return true;
            //    }
            //}
            return false;
        }

        public override string ApplicationName {
            get {
                throw new NotImplementedException();
            }
            set {
                throw new NotImplementedException();
            }
        }

        public override bool ChangePassword(string username, string oldPassword, string newPassword) {
            throw new NotImplementedException();
        }

        public override bool ChangePasswordQuestionAndAnswer(
            string username, string password, string newPasswordQuestion, string newPasswordAnswer) {
            throw new NotImplementedException();
        }

        public override MembershipUser CreateUser(
            string username, string password, string email, string passwordQuestion, string passwordAnswer,
            bool isApproved, object providerUserKey, out MembershipCreateStatus status) {
            throw new NotImplementedException();
        }

        public override bool DeleteUser(string username, bool deleteAllRelatedData) {
            throw new NotImplementedException();
        }

        public override bool EnablePasswordReset {
            get { throw new NotImplementedException(); }
        }

        public override bool EnablePasswordRetrieval {
            get { throw new NotImplementedException(); }
        }

        public override MembershipUserCollection FindUsersByEmail(
            string emailToMatch, int pageIndex, int pageSize, out int totalRecords) {
            throw new NotImplementedException();
        }

        public override MembershipUserCollection FindUsersByName(
            string usernameToMatch, int pageIndex, int pageSize, out int totalRecords) {
            throw new NotImplementedException();
        }

        public override MembershipUserCollection GetAllUsers(
            int pageIndex, int pageSize, out int totalRecords) {

            throw new NotImplementedException();
        }

        public override int GetNumberOfUsersOnline() {
            throw new NotImplementedException();
        }

        public override string GetPassword(string username, string answer) {
            throw new NotImplementedException();
        }

        public override MembershipUser GetUser(string username, bool userIsOnline) {
            throw new NotImplementedException();
        }

        public override MembershipUser GetUser(object providerUserKey, bool userIsOnline) {
            throw new NotImplementedException();
        }

        public override string GetUserNameByEmail(string email) {
            throw new NotImplementedException();
        }

        public override int MaxInvalidPasswordAttempts {
            get { throw new NotImplementedException(); }
        }

        public override int MinRequiredNonAlphanumericCharacters {
            get { throw new NotImplementedException(); }
        }

        public override int MinRequiredPasswordLength {
            get { throw new NotImplementedException(); }
        }

        public override int PasswordAttemptWindow {
            get { throw new NotImplementedException(); }
        }

        public override MembershipPasswordFormat PasswordFormat {
            get { throw new NotImplementedException(); }
        }

        public override string PasswordStrengthRegularExpression {
            get { throw new NotImplementedException(); }
        }

        public override bool RequiresQuestionAndAnswer {
            get { throw new NotImplementedException(); }
        }

        public override bool RequiresUniqueEmail {
            get { throw new NotImplementedException(); }
        }

        public override string ResetPassword(string username, string answer) {
            throw new NotImplementedException();
        }

        public override bool UnlockUser(string userName) {
            throw new NotImplementedException();
        }

        public override void UpdateUser(MembershipUser user) {
            throw new NotImplementedException();
        }
    }
}
